const { values } = require('lodash')

function map(array, fn) {
  let result = []
  for (let i = 0; i < array.length; i++) {
    const element = array[i]
    result.push(fn(element))
  }
  return result
}

const arr = [1, 2, 3, 4, 5]
// console.log(map(arr, value => value * 2))

const every = (array, fn) => {
  let result = true
  for (let i = 0; i < array.length; i++) {
    const element = array[i]
    if (!fn(element)) {
      result = false
      break
    }
  }
  return result
}

console.log(every(arr, key => key < 3))

// 闭包：函数和其周围的状态（词法环境）的引用捆绑在一起形成闭包
// 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
// 闭包的本质：函数在执行的时候会放到一个执行栈上，当函数执行完毕后会从执行栈上移除，
// 但是堆上的作用域成员因为被外部引用不能释放，因此内部函数依然可以访问外部函数的成员
